The Databases service allows you to create structured collections of documents, query and filter lists of documents, and manage an advanced set of read and write access permissions.
All data returned by the Databases service are represented as structured JSON documents.
The Databases service can contain multiple databases, each database can contain multiple collections. A collection is a group of similarly structured documents. The accepted structure of documents is defined by collection attributes. The collection attributes help you ensure all your user-submitted data is validated and stored according to the collection structure.
Using Appwrite permissions architecture, you can assign read or write access to each collection or document in your project for either a specific user, team, user role, or even grant it with public access (any
). You can learn more about how Appwrite handles permissions and access control.
https://<REGION>.cloud.appwrite.io/v1
Create Boolean Attribute
Create a boolean attribute.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
required boolean requiredIs attribute required?
default boolean Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/boolean
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createBooleanAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Collection
Create a new Collection. Before using this route, you should create a new database resource using either a server integration API or directly from your database console.
Request
databaseId string requiredDatabase ID.
collectionId string requiredUnique Id. Choose your own unique ID or pass the string "unique()" to auto generate it. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
name string requiredCollection name. Max length: 128 chars.
permission string requiredSpecifies the permissions model used in this collection, which accepts either 'collection' or 'document'. For 'collection' level permission, the permissions specified in read and write params are applied to all documents in the collection. For 'document' level permissions, read and write permissions are specified in each document. learn more about permissions and get a full list of available permissions.
read array requiredAn array of strings with read permissions. By default no user is granted with any read permissions. learn more about permissions and get a full list of available permissions.
write array requiredAn array of strings with write permissions. By default no user is granted with any write permissions. learn more about permissions and get a full list of available permissions.
Response
201 application/json
POST /databases/{databaseId}/collections
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createCollection(
collectionId = "[COLLECTION_ID]",
name = "[NAME]",
permission = "document",
read = listOf("role:all"),
write = listOf("role:all")
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Database
Create a new Database.
Request
databaseId string requiredUnique Id. Choose your own unique ID or pass the string "unique()" to auto generate it. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
name string requiredCollection name. Max length: 128 chars.
Response
201 application/json
POST /databases
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.create(
name = "[NAME]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Document
Create a new Document. Before using this route, you should create a new collection resource using either a server integration API or directly from your database console.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration. Make sure to define attributes before creating documents.
documentId string requiredDocument ID. Choose your own unique ID or pass the string "unique()" to auto generate it. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
data object requiredDocument data as JSON object.
read array An array of strings with read permissions. By default only the current user is granted with read permissions. learn more about permissions and get a full list of available permissions.
write array An array of strings with write permissions. By default only the current user is granted with write permissions. learn more about permissions and get a full list of available permissions.
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/documents
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createDocument(
collectionId = "[COLLECTION_ID]",
documentId = "[DOCUMENT_ID]",
data = mapOf( "a" to "b" ),
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Email Attribute
Create an email attribute.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
required boolean requiredIs attribute required?
default string Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/email
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createEmailAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Enum Attribute
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
elements array requiredArray of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.
required boolean requiredIs attribute required?
default string Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/enum
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createEnumAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
elements = listOf(),
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Float Attribute
Create a float attribute. Optionally, minimum and maximum values can be provided.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
required boolean requiredIs attribute required?
min number Minimum value to enforce on new documents
max number Maximum value to enforce on new documents
default number Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/float
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createFloatAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Index
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredIndex Key.
type string requiredIndex type.
attributes array requiredArray of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.
orders array Array of index orders. Maximum of 100 orders are allowed.
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/indexes
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createIndex(
collectionId = "[COLLECTION_ID]",
key = "",
type = "key",
attributes = listOf(),
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create Integer Attribute
Create an integer attribute. Optionally, minimum and maximum values can be provided.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
required boolean requiredIs attribute required?
min integer Minimum value to enforce on new documents
max integer Maximum value to enforce on new documents
default integer Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/integer
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createIntegerAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create IP Address Attribute
Create IP address attribute.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
required boolean requiredIs attribute required?
default string Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/ip
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createIpAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create String Attribute
Create a string attribute.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
size integer requiredAttribute size for text attributes, in number of characters.
required boolean requiredIs attribute required?
default string Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/string
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createStringAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
size = 1,
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Create URL Attribute
Create a URL attribute.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
required boolean requiredIs attribute required?
default string Default value for attribute when not provided. Cannot be set when attribute is required.
array boolean Is attribute an array?
Response
201 application/json
POST /databases/{databaseId}/collections/{collectionId}/attributes/url
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.createUrlAttribute(
collectionId = "[COLLECTION_ID]",
key = "",
required = false,
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Get Attribute
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
Response
GET /databases/{databaseId}/collections/{collectionId}/attributes/{key}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.getAttribute(
collectionId = "[COLLECTION_ID]",
key = ""
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Get Collection
Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID.
Response
200 application/json
GET /databases/{databaseId}/collections/{collectionId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.getCollection(
collectionId = "[COLLECTION_ID]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Get Database
Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.
Request
databaseId string requiredDatabase ID.
Response
200 application/json
GET /databases/{databaseId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.get(new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
});
}
Get Document
Get a document by its unique ID. This endpoint response returns a JSON object with the document data.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
documentId string requiredDocument ID.
Response
200 application/json
GET /databases/{databaseId}/collections/{collectionId}/documents/{documentId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.getDocument(
collectionId = "[COLLECTION_ID]",
documentId = "[DOCUMENT_ID]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Get Index
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredIndex Key.
Response
200 application/json
GET /databases/{databaseId}/collections/{collectionId}/indexes/{key}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.getIndex(
collectionId = "[COLLECTION_ID]",
key = ""
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
List Attributes
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
Response
200 application/json
GET /databases/{databaseId}/collections/{collectionId}/attributes
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.listAttributes(
collectionId = "[COLLECTION_ID]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
List Collections
Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.
Request
databaseId string requiredDatabase ID.
search string Search term to filter your list results. Max length: 256 chars.
limit integer Maximum number of collection to return in response. By default will return maximum 25 results. Maximum of 100 results allowed per request.
offset integer Offset value. The default value is 0. Use this param to manage pagination. learn more about pagination
cursor string ID of the collection used as the starting point for the query, excluding the collection itself. Should be used for efficient pagination when working with large sets of data.
cursorDirection string Direction of the cursor, can be either 'before' or 'after'.
orderType string Order result by ASC or DESC order.
Response
200 application/json
GET /databases/{databaseId}/collections
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.listCollections(
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
List Databases
Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.
Request
search string Search term to filter your list results. Max length: 256 chars.
limit integer Maximum number of collection to return in response. By default will return maximum 25 results. Maximum of 100 results allowed per request.
offset integer Offset value. The default value is 0. Use this param to manage pagination. learn more about pagination
cursor string ID of the collection used as the starting point for the query, excluding the collection itself. Should be used for efficient pagination when working with large sets of data.
cursorDirection string Direction of the cursor, can be either 'before' or 'after'.
orderType string Order result by ASC or DESC order.
Response
200 application/json
GET /databases
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.list(
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
List Documents
Get a list of all the user's documents in a given collection. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of documents belonging to the provided collectionId. Learn more about different API modes.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
queries array Array of query strings generated using the Query class provided by the SDK. Learn more about queries. Maximum of 100 queries are allowed, each 4096 characters long.
limit integer Maximum number of documents to return in response. By default will return maximum 25 results. Maximum of 100 results allowed per request.
offset integer Offset value. The default value is 0. Use this value to manage pagination. learn more about pagination
cursor string ID of the document used as the starting point for the query, excluding the document itself. Should be used for efficient pagination when working with large sets of data. learn more about pagination
cursorDirection string Direction of the cursor, can be either 'before' or 'after'.
orderAttributes array Array of attributes used to sort results. Maximum of 100 order attributes are allowed, each 4096 characters long.
orderTypes array Array of order directions for sorting attribtues. Possible values are DESC for descending order, or ASC for ascending order. Maximum of 100 order types are allowed.
Response
200 application/json
GET /databases/{databaseId}/collections/{collectionId}/documents
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.listDocuments(
collectionId = "[COLLECTION_ID]",
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
List Indexes
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
Response
200 application/json
GET /databases/{databaseId}/collections/{collectionId}/indexes
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.listIndexes(
collectionId = "[COLLECTION_ID]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Update Collection
Update a collection by its unique ID.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID.
name string requiredCollection name. Max length: 128 chars.
permission string requiredPermissions type model to use for reading documents in this collection. You can use collection-level permission set once on the collection using the
read
andwrite
params, or you can set document-level permission where each document read and write params will decide who has access to read and write to each document individually. learn more about permissions and get a full list of available permissions.read array An array of strings with read permissions. By default inherits the existing read permissions. learn more about permissions and get a full list of available permissions.
write array An array of strings with write permissions. By default inherits the existing write permissions. learn more about permissions and get a full list of available permissions.
enabled boolean Is collection enabled?
Response
200 application/json
PUT /databases/{databaseId}/collections/{collectionId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.updateCollection(
collectionId = "[COLLECTION_ID]",
name = "[NAME]",
permission = "document",
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Update Database
Update a database by its unique ID.
Request
databaseId string requiredDatabase ID.
name string requiredCollection name. Max length: 128 chars.
Response
200 application/json
PUT /databases/{databaseId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.update(
name = "[NAME]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Update Document
Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID.
documentId string requiredDocument ID.
data object Document data as JSON object. Include only attribute and value pairs to be updated.
read array An array of strings with read permissions. By default inherits the existing read permissions. learn more about permissions and get a full list of available permissions.
write array An array of strings with write permissions. By default inherits the existing write permissions. learn more about permissions and get a full list of available permissions.
Response
200 application/json
PATCH /databases/{databaseId}/collections/{collectionId}/documents/{documentId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.updateDocument(
collectionId = "[COLLECTION_ID]",
documentId = "[DOCUMENT_ID]",
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Delete Attribute
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredAttribute Key.
Response
204 no content
DELETE /databases/{databaseId}/collections/{collectionId}/attributes/{key}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.deleteAttribute(
collectionId = "[COLLECTION_ID]",
key = ""
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Delete Collection
Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID.
Response
204 no content
DELETE /databases/{databaseId}/collections/{collectionId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.deleteCollection(
collectionId = "[COLLECTION_ID]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Delete Database
Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.
Request
databaseId string requiredDatabase ID.
Response
204 no content
DELETE /databases/{databaseId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.delete(new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
});
}
Delete Document
Delete a document by its unique ID.
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
documentId string requiredDocument ID.
Response
204 no content
DELETE /databases/{databaseId}/collections/{collectionId}/documents/{documentId}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.deleteDocument(
collectionId = "[COLLECTION_ID]",
documentId = "[DOCUMENT_ID]"
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}
Delete Index
Request
databaseId string requiredDatabase ID.
collectionId string requiredCollection ID. You can create a new collection using the Database service server integration.
key string requiredIndex Key.
Response
204 no content
DELETE /databases/{databaseId}/collections/{collectionId}/indexes/{key}
import io.appwrite.Client
import io.appwrite.services.Databases
public void main() {
Client client = Client(context)
.setEndpoint("https://[HOSTNAME_OR_IP]/v1") // Your API Endpoint
.setProject("5df5acd0d48c2") // Your project ID
.setKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key
Databases databases = new Databases(client, "[DATABASE_ID]");
databases.deleteIndex(
collectionId = "[COLLECTION_ID]",
key = ""
new Continuation<Response>() {
@NotNull
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resumeWith(@NotNull Object o) {
String json = "";
try {
if (o instanceof Result.Failure) {
Result.Failure failure = (Result.Failure) o;
throw failure.exception;
} else {
Response response = (Response) o;
}
} catch (Throwable th) {
Log.e("ERROR", th.toString());
}
}
}
);
}